import functools

from flask import jsonify, request

from utils.logger_config import logger

from .result_data import ResultData


# 辅助函数：创建错误响应
def create_error_response(code, message):
    """创建标准化错误响应"""
    result = ResultData(code=code, message=message)
    logger.error(f"{code}，请求失败: {message}")
    # logger.error(result.to_dict())
    return jsonify(result.to_dict()), code


# 辅助函数：创建成功响应
def create_success_response(message, data=None):
    """创建标准化成功响应"""
    result = ResultData(code=200, message=message, data=data)
    logger.info(f"{200}，请求成功: {message}")
    # logger.info(result.to_dict())
    return jsonify(result.to_dict())


# 辅助函数：验证请求
def validate_request(f):
    """装饰器：验证请求格式和内容"""

    @functools.wraps(f)
    def decorated_function(*args, **kwargs):
        # 检查Content-Type
        if not request.is_json:
            return create_error_response(
                415, "请求的Content-Type必须为'application/json'"
            )

        # 获取请求数据
        try:
            data = request.get_json()
        except Exception as e:
            return create_error_response(400, f"无法解析JSON数据: {str(e)}")

        # 验证必要参数
        if not data:
            return create_error_response(400, "请求体不能为空")

        # 将解析后的数据传递给被装饰的函数
        request.parsed_data = data
        return f(*args, **kwargs)

    return decorated_function
